package org.scboy.coobi.init;

import org.scboy.coobi.caches.DbTableCache;
import org.scboy.coobi.sql.Coobi;
import org.scboy.utils.entitys.coobi.DbIndex;
import org.scboy.utils.entitys.coobi.DbTable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import cn.hutool.log.Log;
import cn.hutool.log.LogFactory;

@Component
public class DbInit {

	Log log=LogFactory.get();

	@Autowired
	Coobi coobi;
	
	/**
	 * 初始化表
	 */
	@Transactional
	public void initDbTable() {
		
		//先只初始化未创建的表，在表未创建之前，不能存储表配置数据。
		for (DbTable table : DbTableCache.getDbTables()) {
			//检查表是否存在
			if (!coobi.exists(table.getName(),null)) {
				log.info("新增数据库表["+table.getName()+"]表。");
				if (!coobi.createTable(table)) {
					throw new RuntimeException("创建数据库表["+table.getName()+"]表失败。");
				}
				//创建索引
				for (DbIndex index : table.getIndexs()) {
					if(!coobi.createIndex(table.getName(), index)) {
						throw new RuntimeException("创建数据库表["+table.getName()+"]的["+index.getIndexName()+"]索引失败。");
					}
				}
			}
		}
	}
	
}
